/**
 * 判断类型
 */
class TypeFn {
    /**
     * @desc 是否字符串
     * @param o
     * @returns {boolean} 是否字符串
     */
    static isString(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'String'
    }

    /**
     * @desc 是否数字
     * @param o
     * @returns {boolean} 是否数字
     */
    static isNumber(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Number'
    }

    /**
     * @desc 是否boolean
     * @param o
     * @returns {boolean} 是否boolean
     */
    static isBoolean(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
    }

    /**
     * @desc 是否函数
     * @param o
     * @returns {boolean} 是否函数
     */
    static isFunction(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
    }

    /**
     * @desc 是否为null
     * @param o
     * @returns {boolean} 是否为null
     */
    static isNull(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
    }

    /**
     * @desc 是否undefined
     * @param o
     * @returns {boolean} 是否undefined
     */
    static isUndefined(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
    }

    /**
     * @desc 是否对象
     * @param o
     * @returns {boolean} 是否对象
     */
    static isObj(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
    }

    /**
     * @desc 是否数组
     * @param o
     * @returns {boolean} 是否数组
     */
    static isArray(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Array'
    }

    /**
     * @desc 是否时间
     * @param o
     * @returns {boolean} 是否时间
     */
    static isDate(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Date'
    }

    /**
     * @desc 是否正则
     * @param o
     * @returns {boolean} 是否正则
     */
    static isRegExp(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'RegExp'
    }

    /**
     * @desc 是否错误对象
     * @param o
     * @returns {boolean} 是否错误对象
     */
    static isError(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Error'
    }

    /**
     * @desc 是否Symbol函数
     * @param o
     * @returns {boolean} 是否Symbol函数
     */
    static isSymbol(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Symbol'
    }

    /**
     * @desc 是否Promise对象
     * @param o
     * @returns {boolean} 是否Promise对象
     */
    static isPromise(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Promise'
    }

    /**
     * @desc 是否Set对象
     * @param o
     * @returns {boolean} 是否Set对象
     */
    static isSet(o) {
        return Object.prototype.toString.call(o).slice(8, -1) === 'Set'
    }

    /**
     * @desc 是否为False
     * @param o
     * @returns {boolean} 是否为False
     */
    static isFalse(o) {
        return o === '' || o === undefined || o == null || o === 'null' || o === 'undefined' || o === 0 || o === false || isNaN(o);

    }

    /**
     * @desc 是否为True
     * @param o
     * @returns {boolean} 是否为True
     */
    static isTrue(o) {
        return !this.isFalse(o)
    }
}

module.exports = TypeFn;